/*
 * matriz que reprecenta el espacio deonde se mueven los marcianos.
 * 
 */
package spaceinvaders;

import java.awt.Point;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

/**
 *
 * @author jorge
 */
public class Space
{

    private int[][] space;
    private int tamanoColumna;
    private int tamanoFila;
    private int direccion;
    private int bajada;
    private int moverTerricola;
    private ArrayList<Figura> figuras;
    private Figura terricola;
    private Figura nave;
    private Figura disparo;

    public Space()
    {
        this.tamanoFila = 245;
        this.tamanoColumna = 200;
        this.space = new int[this.tamanoColumna][this.tamanoFila];
        this.figuras = new ArrayList();
        this.direccion = 1;
        this.bajada = 1;
        this.moverTerricola = 0;

        this.terricola = new Terricola(new Point(116, 191));
        disparo();

        //inicializarSpace();
        //this.space[0][199] = 1;
        crearFiguras();
        moverFiguras();
        agregarMarcianos();
    }

    public int[][] getSpace()
    {
        return this.space;
    }

    public int getTmanoColumna()
    {
        return this.tamanoColumna;
    }

    public int getTamanoFila()
    {
        return this.tamanoFila;
    }

    public void setMoverTerricola(int direccion)
    {
        this.moverTerricola = direccion;
    }

    /**
     * inicializa la matriz de space con ceros
     */
    public void inicializarSpace()
    {
        for (int i = 0; i < 200; i++)
        {
            for (int j = 0; j < 245; j++)
            {
                this.space[i][j] = 0;
            }
        }
    }

    /*
     * crea los ojetos figuas que representan los marcianos
     */
    public void crearFiguras()
    {
        Point punto = new Point(38, 50);

        for (int i = 0; i < 66; i++)
        {
            if (i < 11)
            {

                this.figuras.add(new MarcianoCalamar(punto));
                punto.setLocation(punto.x + 15, punto.y);
            }
            else if (i < 33)
            {
                if (i == 11)
                {
                    punto = new Point(38, 60);
                }
                else if (i == 22)
                {
                    punto = new Point(38, 70);
                }

                this.figuras.add(new MarcianoCangrejo(punto));
                punto.setLocation(punto.x + 15, punto.y);
            }
            else if (i < 55)
            {
                if (i == 33)
                {
                    punto = new Point(38, 80);
                }
                else if (i == 44)
                {
                    punto = new Point(38, 90);
                }

                this.figuras.add(new MarcianoPulpo(punto));
                punto.setLocation(punto.x + 15, punto.y);
            }

        }

    }

    /*
     * agrega las figuras a la matriz
     */
    public void agregarMarcianos()
    {
        int leng = this.figuras.size();
        Figura marciano;
        Point punto;

        for (int i = 0; i < leng; i++)
        {
            marciano = this.figuras.get(i);
            punto = marciano.getCoordenada();

            for (int j = 0; j < marciano.tamanoAlto; j++)
            {
                for (int k = 0; k < marciano.tamanoAncho; k++)
                {
                    this.space[punto.y + j][punto.x + k] = marciano.getForma()[j][k];
                }
            }
        }
    }

    public void agregarFiguras()
    {
        inicializarSpace();

        Figura marciano;

        
    }

    /**
     * imprime la matriz de space.
     */
    public void mostrarSpace()
    {
        for (int i = 0; i < 245; i++)
        {
            for (int j = 0; j < 200; j++)
            {
                System.out.print(this.space[i][j]);
            }

            System.out.println();
        }
    }

    public void moverFiguras()
    {
        direccion();

        for (Figura marciano : this.figuras)
        {
            if (this.direccion == -1)
            {
                marciano.desplazar(2);
                marciano.cambiarForma();
            }
            else if (this.direccion == 1)
            {
                marciano.desplazar(1);
                marciano.cambiarForma();
            }

            if (this.bajada == -1)
            {
                marciano.desplazar(3);
            }
        }

        this.bajada = 1;

        agregarMarcianos();
    }

    /**
     * mueve a la figura terricola
     * @param e KeyEvent
     *  
     */
    public void moverTerricola()
    {
        if (this.moverTerricola == -1 && this.terricola.getCoordenada().x > 0)
        {
            this.terricola.desplazar(2);
        }
        else if (this.moverTerricola == 1 && this.terricola.getCoordenada().x + this.terricola.getTamanoAncho() < 244)
        {
            this.terricola.desplazar(1);
        }

        agregarMarcianos();
    }

    public void disparo()
    {
        Point point = new Point(this.terricola.getCoordenada());
        point.setLocation(point.x + 5, point.y);

        this.disparo = new Disparo(point);
    }

    public void moverDisparo()
    {
        if (this.disparo != null)
        {
            this.disparo.desplazar(4);
        }
    }

    /*
     * determina si una figura esta al borde de la matriz
     */
    public void direccion()
    {
        for (Figura figura : this.figuras)
        {
            if (figura.getCoordenada().x == 0)
            {
                this.direccion = 1;
                this.bajada = -1;
            }
            else if ((figura.getCoordenada().x + figura.getTamanoAncho()) == 245)
            {
                this.direccion = -1;
                this.bajada = -1;
            }

            if (figura.getCoordenada().y + figura.tamanoAlto == 200)
            {
                this.bajada = 1;
            }

        }
    }
}
